/*
 * @Author: HeAo
 * @Date: 2022-08-13 16:14:21
 * @LastEditTime: 2022-08-16 10:19:29
 * @LastEditors: HeAo
 * @Description: 
 * @FilePath: \JavaScripe\day-05\09-函数调用.js
 * 别乱动！
 */
// // 1、this的执行
// var obj = {
//   name: 'briup',
//   sayName: function () {
//     // console.log(arguments);
//     // console.log(this)  //指向global
//     console.log(this.name); //this.name 执行当前方法的name
//   }
// }
// // 不能写成var b = obj.sayName() 因为我们后面用b() 则会变成obj.sayName()()
// var b = obj.sayName
// b() //全局调用  this指向全局 而全局变量中没有name，因此undefined
// obj.sayName(); // briup

// // // 2、call 改变this的指向 call(执行环境对象,实参列表);
// // b.call(obj)


// 2.2call也可以传递参数
var obj = {
  name: 'briup',
  sayName: function (a, b) {
    // console.log(arguments);
    console.log(this.name + a + b); //this.name 执行当前方法的name
  }
}
var b = obj.sayName
// b.call(obj, '-b全局调用-', 2) //briup-b全局调用-2
obj.sayName('-obj对象调用-', 2); // briup-obj对象调用-2



// // 3、apply
// b.apply(obj, ['-apply-b全局调用-', 456]) //briup-apply-b全局调用-456

// 4、bind
var res = b.bind(obj, '-bind-b全局调用-', 2)
res()
console.log(res); //发现res是一个函数